/**
 *	实验二
 *	假设有火车票1000张，创建10个线程模拟10个售票点，每个售票点100毫秒卖一张票。
 *	打印出售票过程，注意使用synchronized确保同一张票只能卖出一次。输出格式如下：
 *	第4售票点卖出第100张票
 *	第2售票点卖出第101张票 ……
 */
class T4E02 
{
	public static void main(String[] args) 
	{
		Resource rs = new Resource(100);

		for (int i=0;i<10 ;i++ )
		{
			new Thread(new Seller(i,rs)).start();
		}
	}
}
/**
 *	资源类
 *	定义了票的总数，和同步了的售票方法
 */
class Resource
{
	int ticketNum = 1000;
	boolean flag = false ; // 定义票是否卖完

	public Resource(){}
	public Resource(int num)
	{
		this.ticketNum = num;
	}

	public synchronized void sellTicket(Seller s)
	{
		if (ticketNum > 0)
		{
			System.out.println("第" + s.num + "售票点卖出了第" + ticketNum + "张票……");
			ticketNum--;
		}
		else 
		{
			flag = true;
		}
	}
}
/**
 *	售票点类
 *	
 */
class Seller implements Runnable
{
	int num;
	Resource rs;

	public Seller(int num,Resource rs)
	{
		this.num = num;
		this.rs = rs;
	}

	public final void run()
	{
		while (!rs.flag)
		{
			/**
			 *  调用资源类的同步方法
			 */ 
			rs.sellTicket(this); 

			try
			{
				Thread.sleep(100);
			}
			catch (InterruptedException e)
			{
				e.printStackTrace();
			}
		}
	}
}